In distributed computing systems, computing resources are shared between multiple sources of computing workloads. For example, resources may be shared between multiple users, groups, applications and workstations.
Distributed computing allows large computational resources to be pooled and allocated to tasks as needed, rather than being permanently associated with a single server or workstation. Accordingly, resources can be provided for any given workload at a relatively low cost.
Distributed computing systems may need to perform a diverse set of workloads and may include a diverse set of computing resources. For example, computing resources may include general-purpose processors, such as x86 processors; graphics processors (GPUs); field-programmable gate arrays (FPGAs); and embedded processors (DSPs).
General purpose processors are relatively flexible. However, more specialized types of processors, such as may be suited to perform certain types of workloads more efficiently.
Typically, applications are developed or packaged for a specific platform. That is, applications are bound to a particular type of processor, using resources such as APIs, libraries and binaries for that type of processor. Unfortunately, such an approach does not exploit the flexibility of distributed computing systems with heterogenous processing resources.